{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二步：调整树的参数：max_depth & min_child_weight\n",
    "(粗调，参数的步长为2；下一步是在粗调最佳参数周围，将步长降为1，进行精细调整)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1754d080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Target 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('target');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据分割训练数据与测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 获取特征，标签\n",
    "y = train['interest_level']\n",
    "X = train.drop(['interest_level'], axis=1)\n",
    "\n",
    "# 由于数据集较大，在此随机采样30%的数据构建训练样本，其余作为测试样本\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.7, stratify=y)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((14805, 227), (34547, 227))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape, X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "# 各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（125），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.62294, std: 0.00390, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.62228, std: 0.00403, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.62206, std: 0.00342, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.61665, std: 0.00364, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.61616, std: 0.00399, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.61608, std: 0.00461, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.62513, std: 0.00454, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.62282, std: 0.00568, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.62224, std: 0.00541, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.63924, std: 0.01082, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.63166, std: 0.00614, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.62732, std: 0.00489, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " -0.61608456723905947)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=125,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 16.38933425,  15.80592256,  16.02425623,  25.01603069,\n",
       "         25.16683083,  24.28740029,  33.23291264,  32.44173298,\n",
       "         32.64866939,  46.50379233,  47.82934175,  38.099752  ]),\n",
       " 'mean_score_time': array([ 0.08244672,  0.08111539,  0.07958016,  0.11308513,  0.11186419,\n",
       "         0.10857782,  0.13649831,  0.13413744,  0.13882318,  0.24238625,\n",
       "         0.16794162,  0.14484844]),\n",
       " 'mean_test_score': array([-0.62293569, -0.62227602, -0.62205625, -0.6166516 , -0.61615548,\n",
       "        -0.61608457, -0.62513484, -0.62282274, -0.62224437, -0.63924128,\n",
       "        -0.63165691, -0.62732174]),\n",
       " 'mean_train_score': array([-0.57931474, -0.58121042, -0.58249979, -0.48935466, -0.5000822 ,\n",
       "        -0.50815157, -0.36683931, -0.40208752, -0.42411168, -0.25928904,\n",
       "        -0.31661135, -0.35613964]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 8,  6,  4,  3,  2,  1,  9,  7,  5, 12, 11, 10], dtype=int32),\n",
       " 'split0_test_score': array([-0.62041446, -0.61799732, -0.6185524 , -0.6153531 , -0.61247159,\n",
       "        -0.61198664, -0.61888396, -0.61292444, -0.613757  , -0.628029  ,\n",
       "        -0.62822798, -0.62077506]),\n",
       " 'split0_train_score': array([-0.58150285, -0.58343062, -0.58510517, -0.49241836, -0.50306023,\n",
       "        -0.51086703, -0.36990922, -0.40317009, -0.42890294, -0.26077979,\n",
       "        -0.31827309, -0.35539886]),\n",
       " 'split1_test_score': array([-0.62849307, -0.6283369 , -0.6277005 , -0.62309203, -0.62317343,\n",
       "        -0.62380611, -0.63247343, -0.62939705, -0.62949643, -0.65928309,\n",
       "        -0.64178666, -0.63574396]),\n",
       " 'split1_train_score': array([-0.57759531, -0.57981524, -0.58169182, -0.48533774, -0.49810897,\n",
       "        -0.50441365, -0.36371765, -0.40195602, -0.41880589, -0.26077355,\n",
       "        -0.31844185, -0.35615985]),\n",
       " 'split2_test_score': array([-0.62195523, -0.62112137, -0.62251203, -0.61755688, -0.61659829,\n",
       "        -0.61855225, -0.62693996, -0.62593742, -0.62632021, -0.63188719,\n",
       "        -0.63567015, -0.62740819]),\n",
       " 'split2_train_score': array([-0.57867674, -0.58027741, -0.58103096, -0.48945167, -0.50022009,\n",
       "        -0.5098186 , -0.36475059, -0.40232231, -0.42492047, -0.25816179,\n",
       "        -0.31673628, -0.35576502]),\n",
       " 'split3_test_score': array([-0.61768757, -0.61845361, -0.61842388, -0.61220864, -0.61208817,\n",
       "        -0.61144841, -0.62249326, -0.62065054, -0.62017442, -0.63965555,\n",
       "        -0.62670202, -0.62496581]),\n",
       " 'split3_train_score': array([-0.57826895, -0.5796457 , -0.58146416, -0.49008475, -0.4975856 ,\n",
       "        -0.50680332, -0.36618056, -0.39986763, -0.42354384, -0.25852456,\n",
       "        -0.31360689, -0.35796622]),\n",
       " 'split4_test_score': array([-0.62612639, -0.62547006, -0.62309085, -0.61504355, -0.61644351,\n",
       "        -0.61462615, -0.62488223, -0.62520543, -0.62147325, -0.63734809,\n",
       "        -0.62589184, -0.62771438]),\n",
       " 'split4_train_score': array([-0.58052983, -0.58288311, -0.58320684, -0.4894808 , -0.50143612,\n",
       "        -0.50885523, -0.36963855, -0.40312152, -0.42438529, -0.2582055 ,\n",
       "        -0.31599863, -0.35540825]),\n",
       " 'std_fit_time': array([ 0.27903423,  0.10391261,  0.01867599,  0.16950215,  0.26826478,\n",
       "         0.26457244,  0.14848315,  0.03815252,  1.11830813,  2.20763688,\n",
       "         1.86328345,  3.67915832]),\n",
       " 'std_score_time': array([ 0.00469543,  0.00729676,  0.00260858,  0.00480254,  0.0026495 ,\n",
       "         0.00506172,  0.00408687,  0.00486756,  0.01193369,  0.0379215 ,\n",
       "         0.00986477,  0.02043737]),\n",
       " 'std_test_score': array([ 0.00389681,  0.00402983,  0.00342394,  0.00364191,  0.0039915 ,\n",
       "         0.00460746,  0.0045444 ,  0.00568047,  0.00540666,  0.01082039,\n",
       "         0.00613647,  0.00488961]),\n",
       " 'std_train_score': array([ 0.00146434,  0.00161199,  0.00149471,  0.00228387,  0.00204193,\n",
       "         0.00229946,  0.00252197,  0.00120345,  0.00322983,  0.00122109,\n",
       "         0.00176238,  0.00095507])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.616085 using {'max_depth': 5, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/Users/karen/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nFgsSY4wxYfn/BeIRvV+0Wg8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a239c7fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据初步的调试，最佳参数组合：{'max_depth': 5, 'min_child_weight': 5}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
